package com.wawi.utils.excel;

//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//import org.apache.poi.ss.usermodel.Cell;
//import org.apache.poi.ss.usermodel.Row;
//import org.apache.poi.ss.usermodel.Sheet;
//import org.apache.poi.ss.usermodel.Workbook;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import com.google.common.base.Preconditions;
//import com.google.common.collect.Lists;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//
//import javax.servlet.http.HttpServletResponse;
/*
 * poi导出
 */
public class PoiExporter {
//
//    public static final String VERSION_2003 = "2003";
//    private static final int HEADER_ROW = 1;
//    private static final int MAX_ROWS = 65535;
//    private String version="2007";
//    private String[] sheetNames = new String[0];
//    private int cellWidth = 8000;
//    private int headerRow;
//    private String[][] headers;
//    private String[][] columns;
//    private List<?>[] data;
//    private ExcelFilter filter;
//
//    public PoiExporter(List<?>... data) {
//        this.data = data;
//    }
//
//    public static PoiExporter data(List<?>... data) {
//        return new PoiExporter(data);
//    }
//
//    public static List<List<?>> dice(List<?> num, int chunkSize) {
//        int size = num.size();
//        int chunk_num = size / chunkSize + (size % chunkSize == 0 ? 0 : 1);
//        List<List<?>> result = Lists.newArrayList();
//        for (int i = 0; i < chunk_num; i++) {
//            result.add(Lists.newArrayList(num.subList(i * chunkSize, i == chunk_num - 1 ? size : (i + 1) * chunkSize)));
//        }
//        return result;
//    }
//
//    public Workbook export(HttpServletResponse response) {
//        Preconditions.checkNotNull(data, "data can not be null");
//        Preconditions.checkNotNull(headers, "headers can not be null");
//        Preconditions.checkNotNull(columns, "columns can not be null");
//        Preconditions.checkArgument(data.length == sheetNames.length && sheetNames.length == headers.length
//                && headers.length == columns.length, "data,sheetNames,headers and columns'length should be the same." +
//                "(data:" + data.length + ",sheetNames:" + sheetNames.length + ",headers:" + headers.length + ",columns:" + columns.length + ")");
//        Preconditions.checkArgument(cellWidth >= 0, "cellWidth can not be less than 0");
//      
//        Workbook wb;
//        if (VERSION_2003.equals(version)) {
//            wb = new HSSFWorkbook();
//            if (data.length > 1) {
//                for (int i = 0; i < data.length; i++) {
//                    List<?> item = data[i];
//                    Preconditions.checkArgument(item.size() < MAX_ROWS, "Data [" + i + "] is invalid:invalid data size (" + item.size() + ") outside allowable range (0..65535)");
//                }
//            } else if (data.length == 1 && data[0].size() > MAX_ROWS) {
//                data = dice(data[0], MAX_ROWS).toArray(new List<?>[]{});
//                String sheetName = sheetNames[0];
//                sheetNames = new String[data.length];
//                for (int i = 0; i < data.length; i++) {
//                    sheetNames[i] = sheetName + (i == 0 ? "" : (i + 1));
//                }
//                String[] header = headers[0];
//                headers = new String[data.length][];
//                for (int i = 0; i < data.length; i++) {
//                    headers[i] = header;
//                }
//                String[] column = columns[0];
//                columns = new String[data.length][];
//                for (int i = 0; i < data.length; i++) {
//                    columns[i] = column;
//                }
//            }
//        } else {
//            wb = new XSSFWorkbook();
//        }
//        if (data.length == 0) {
//            return wb;
//        }
//        for (int i = 0; i < data.length; i++) {
//            Sheet sheet = wb.createSheet(sheetNames[i]);
//            Row row;
//            Cell cell;
//            if (headers[i].length > 0) {
//                row = sheet.createRow(0);
//                if (headerRow <= 0) {
//                    headerRow = HEADER_ROW;
//                }
//                headerRow = Math.min(headerRow, MAX_ROWS);
//                for (int h = 0, lenH = headers[i].length; h < lenH; h++) {
//                    if (cellWidth > 0) {
//                        sheet.setColumnWidth(h, cellWidth);
//                    }
//                    cell = row.createCell(h);
//                    cell.setCellValue(headers[i][h]);
//                }
//            }
//
//            for (int j = 0, len = data[i].size(); j < len; j++) {
//                row = sheet.createRow(j + headerRow);
//                Object obj = data[i].get(j);
//                if (obj == null) {
//                    continue;
//                }
//                if (obj instanceof Map) {
//                    processAsMap(columns[i], row, obj);
//                }  else {
//                	try {
//						processAsMap(columns[i], row, ReflectUtil.describe(obj));
//					} catch (Exception e) {
//						e.printStackTrace();
//					}
//                }
//            }
//        }
//        return wb;
//    }
//
//
//    
//    @SuppressWarnings("unchecked")
//    private void processAsMap(String[] columns, Row row, Object obj) {
//        Cell cell;
//        Map<String, Object> map = (Map<String, Object>) obj;
//        if (columns.length == 0) { // show all if column not specified
//            Set<String> keys = map.keySet();
//            int columnIndex = 0;
//            for (String key : keys) {
//                cell = row.createCell(columnIndex);
//                Object value=null;
//                if(filter!=null){
//                	value=filter.doFilter(key, map.get(key));
//                }
//                cell.setCellValue(value == null ? "" : value.toString());
//                columnIndex++;
//            }
//        } else {
//            for (int j = 0, len = columns.length; j < len; j++) {
//                cell = row.createCell(j);
//                Object value=null;
//                if(filter!=null){
//                	value=filter.doFilter(columns[j], map.get(columns[j]));
//                }
//                cell.setCellValue(value == null ? "" : value.toString());
//            }
//        }
//    }
//
//    public PoiExporter version(String version) {
//        this.version = version;
//        return this;
//    }
//
//    public PoiExporter sheetName(String sheetName) {
//        this.sheetNames = new String[]{sheetName};
//        return this;
//    }
//
//    public PoiExporter sheetNames(String... sheetName) {
//        this.sheetNames = sheetName;
//        return this;
//    }
//
//    public PoiExporter cellWidth(int cellWidth) {
//        this.cellWidth = cellWidth;
//        return this;
//    }
//
//    public PoiExporter headerRow(int headerRow) {
//        this.headerRow = headerRow;
//        return this;
//    }
//
//    public PoiExporter header(String... header) {
//        this.headers = new String[][]{header};
//        return this;
//    }
//
//    public PoiExporter headers(String[]... headers) {
//        this.headers = headers;
//        return this;
//    }
//
//    public PoiExporter column(String... column) {
//        this.columns = new String[][]{column};
//        return this;
//    }
//
//    public PoiExporter columns(String[]... columns) {
//        this.columns = columns;
//        return this;
//    }
//	/*
//	 * 过滤数据
//	 */
//	public PoiExporter filter(ExcelFilter filter) {
//		this.filter = filter;
//		return this;
//	}
}
